<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>01_原型链继承</title>
</head>
<body>
<!-- 
方式1：原型链继承
    * 套路：
        * 定义父类型构造函数
        * 给父类型的原型添加方法
        * 定义子类型的构造函数
        * 创建父类型的对象赋值给子类型的原型
        * 将子类型原型的构造属性设置为子类型
        * 给子类型原型添加方法
        * 创建子类型的对象，可以调用父类型的方法
    * 关键
        * 子类型的原型为父类型的一个实例对象
-->
<script>
// 定义父类型构造函数
function Aminial() {
    this.name = "Aminial"
}

// 给父类型的原型添加方法
Aminial.prototype.sleep = function() {
    console.log(this.name + ' 睡觉了...')
}

// 定义子类型的构造函数
function Dog() {
    this.name = "GouGouGou"
}

// 创建父类型的对象赋值给子类型的原型
Dog.prototype = new Aminial()

// 将子类型原型的构造属性设置为子类型
Dog.prototype.constructor = Dog

// 给子类型原型添加方法
Dog.prototype.eat = function() {
    console.log('eat:',this.name)
}

// 创建子类型对象，调用父类的方法
var dog = new Dog()
console.log(dog)
dog.sleep() // 大黄 睡觉了...
dog.eat() // eat: 大黄 4 黑色

</script>
</body>
</html>